<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 构造函数；根据对象的属性，创建对象，动态给添加属性，返回值个对象
        function Hero(name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

            this.sing = function (address) {
                console.log(`来${address}开演唱会`);
            }
            console.log(this);
        }

        let lan = new Hero('澜', 33, true, 18);
        let yao = new Hero('瑶', 16, false, 15);
        console.log(typeof lan);
        console.log(lan.name);
        lan.sing('蓝区');

        /* 
          总结；  
             1.构造函数就是类
             2.通过类这个模块，可以创建对象
             3.类是对公共属性和方法的抽取

        */

        /* 
          构造函数
            1.作用：创建对象
            2.返回值是一个对象，默认省略
            3.封装的代码是，给对象多态的添加属性和方法
            4.this是当前对象
            5，函数名用大驼峰
            6.配合关键字new使用
            7.构造函数和类是一码事
            8.就是对象公共属性和方法的抽取
            9.属性名和参数名尽量保持一致，刻度性强

            约定大于规范，规范大于编码
        */
    </script>
</body>

</html>